import json

from tornado import web


class MainHandler(web.RequestHandler):
    # 入口
    def initialize(self):
        # 用于初始化hanler类的过程
        # 这个是类实例化的方法（只实例化一次）
        pass

    def prepare(self):
        # 用于真正调用请求处理之前的初始化方法
        # 每次请求都会经过该方法
        # 1. 打印日志
        # 2. 打开文件
        pass

    def on_finish(self):
        # 当请求结束之前
        # 关闭句柄，清理内存
        pass

    # http 方法
    async def get(self, *args, **kwargs):
        # 输入
        data1 = self.get_argument("name")  # xxx/?name=zhangsan    => zhangsan # 这个能够获取到get和post的值
        data2 = self.get_arguments("name")  # xxx/?name=zhangsan&name=lisi  => ["zhangsan","lisi"]

        data1 = self.get_query_argument("name")
        data2 = self.get_query_arguments("name")  # 和 get_arguments 效果是一样的，这个只能获取get方法的值
        self.write("hello world 3!")

    async def post(self, *args, **kwargs):
        data1 = self.get_argument("name")
        data2 = self.get_arguments("name")  # post方法只能通过这个来获取值
        data3 = self.request.arguments  # 获取所有传入的参数

        data4 = self.get_body_argument("name")
        data5 = self.get_body_arguments("name")

        # 获取json数据输入
        param = self.request.body.decode("utf8")
        data6 = json.load(param)


        # 输出
        self.set_status(500)    # 设置返回状态码
        self.write("hello")     # 文本输出（长连接，不会主动断开连接）
        self.finish({
            'ret':200
        })    # 调用finish后会主动断开连接
        self.redirect(self.reverse_url('xx')) # 连接跳转
        self.write_error(500)  # 需要重写该方法， 用于自定义错误输出
        pass

    async def delete(self, *args, **kwargs):
        pass

    async def put(self, *args, **kwargs):
        pass
